home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / ply15dat.zip / TEAPOT.C < prev    next >
C/C++ Source or Header  |  1992-02-15  |  20KB  |  710 lines

  1. /* Generate Polyray data file for the UTAH Teapot */
  2. #include <stdio.h>
  3.  
  4. /*  STEPS specifies how    many tiles each    surface    patch should be    broken
  5.     into when displayed.  */
  6.  
  7. #define    U_Steps 3
  8. #define V_Steps 3
  9. #define Quality 1
  10. #define Flatness 0.01
  11.  
  12. FILE *datfile;
  13.  
  14. typedef    short patchdef[4][4];       /* Surface patch definition */
  15. typedef    double vertex[3];       /* Three dimensional    point */
  16.  
  17. /*  Three dimensional points are stored    in arrays of type VERTEX.
  18.     The    following definitions are used to access the individual
  19.     coodinates of a point. */
  20.  
  21. #define    X 0
  22. #define    Y 1
  23. #define    Z 2
  24.  
  25. /*  Surface patch definitions.    Each patch is a    four by    four array of three
  26.     dimensional    points.     To save space,    the patches are    stored as indices
  27.     into a table of vertices defined below.  */
  28.  
  29. static patchdef    patches[] = {
  30.  
  31.     /* Rim */
  32.  
  33.     {{1, 2,    3, 4},
  34.      {5, 6,    7, 8},
  35.      {9, 10, 11, 12},
  36.      {13, 14, 15, 16}
  37.     },
  38.     {
  39.      {4, 17, 18, 19},
  40.      {8, 20, 21, 22},
  41.      {12, 23, 24, 25},
  42.      {16, 26, 27, 28}
  43.     },
  44.     {
  45.      {19, 29, 30, 31},
  46.      {22, 32, 33, 34},
  47.      {25, 35, 36, 37},
  48.      {28, 38, 39, 40}
  49.     },
  50.     {
  51.      {31, 41, 42, 1},
  52.      {34, 43, 44, 5},
  53.      {37, 45, 46, 9},
  54.      {40, 47, 48, 13}
  55.     },
  56.  
  57.     /* Body    */
  58.  
  59.     {
  60.      {13, 14, 15, 16},
  61.      {49, 50, 51, 52},
  62.      {53, 54, 55, 56},
  63.      {57, 58, 59, 60}
  64.     },
  65.  
  66.     {
  67.      {16, 26, 27, 28},
  68.      {52, 61, 62, 63},
  69.      {56, 64, 65, 66},
  70.      {60, 67, 68, 69}
  71.     },
  72.  
  73.     {
  74.      {28, 38, 39, 40},
  75.      {63, 70, 71, 72},
  76.      {66, 73, 74, 75},
  77.      {69, 76, 77, 78}
  78.     },
  79.  
  80.     {
  81.      {40, 47, 48, 13},
  82.      {72, 79, 80, 49},
  83.      {75, 81, 82, 53},
  84.      {78, 83, 84, 57}
  85.     },
  86.  
  87.     {
  88.      {57, 58, 59, 60},
  89.      {85, 86, 87, 88},
  90.      {89, 90, 91, 92},
  91.      {93, 94, 95, 96}
  92.     },
  93.  
  94.     {
  95.      {60, 67, 68, 69},
  96.      {88, 97, 98, 99},
  97.      {92, 100, 101,    102},
  98.      {96, 103, 104,    105}
  99.     },
  100.  
  101.     {
  102.      {69, 76, 77, 78},
  103.      {99, 106, 107,    108},
  104.      {102, 109, 110, 111},
  105.      {105, 112, 113, 114}
  106.     },
  107.  
  108.     {
  109.      {78, 83, 84, 57},
  110.      {108, 115, 116, 85},
  111.      {111, 117, 118, 89},
  112.      {114, 119, 120, 93}
  113.     },
  114.  
  115.     /* Handle */
  116.  
  117.     {
  118.      {121, 122, 123, 124},
  119.      {125, 126, 127, 128},
  120.      {129, 130, 131, 132},
  121.      {133, 134, 135, 136}
  122.     },
  123.  
  124.     {
  125.      {124, 137, 138, 121},
  126.      {128, 139, 140, 125},
  127.      {132, 141, 142, 129},
  128.      {136, 143, 144, 133}
  129.     },
  130.  
  131.     {
  132.      {133, 134, 135, 136},
  133.      {145, 146, 147, 148},
  134.      {149, 150, 151, 152},
  135.      {69, 153, 154,    155}
  136.     },
  137.  
  138.     {
  139.      {136, 143, 144, 133},
  140.      {148, 156, 157, 145},
  141.      {152, 158, 159, 149},
  142.      {155, 160, 161, 69}
  143.     },
  144.  
  145.     /* Spout */
  146.  
  147.     {
  148.      {162, 163, 164, 165},
  149.      {166, 167, 168, 169},
  150.      {170, 171, 172, 173},
  151.      {174, 175, 176, 177}
  152.     },
  153.  
  154.     {
  155.      {165, 178, 179, 162},
  156.      {169, 180, 181, 166},
  157.      {173, 182, 183, 170},
  158.      {177, 184, 185, 174}
  159.     },
  160.  
  161.     {
  162.      {174, 175, 176, 177},
  163.      {186, 187, 188, 189},
  164.      {190, 191, 192, 193},
  165.      {194, 195, 197, 197}
  166.     },
  167.  
  168.     {
  169.      {177, 184, 185, 174},
  170.      {189, 198, 199, 186},
  171.      {193, 200, 201, 190},
  172.      {197, 202, 203, 194}
  173.     },
  174.  
  175.     /* Lid */
  176.  
  177.     {
  178.      {204, 204, 204, 204},
  179.      {207, 208, 209, 210},
  180.      {211, 211, 211, 211},
  181.      {212, 213, 214, 215}
  182.     },
  183.  
  184.     {
  185.      {204, 204, 204, 204},
  186.      {210, 217, 218, 219},
  187.      {211, 211, 211, 211},
  188.      {215, 220, 221, 222}
  189.     },
  190.  
  191.     {
  192.      {204, 204, 204, 204},
  193.      {219, 224, 225, 226},
  194.      {211, 211, 211, 211},
  195.      {222, 227, 228, 229}
  196.     },
  197.  
  198.     {
  199.      {204, 204, 204, 204},
  200.      {226, 230, 231, 207},
  201.      {211, 211, 211, 211},
  202.      {229, 232, 233, 212}
  203.     },
  204.  
  205.     {
  206.      {212, 213, 214, 215},
  207.      {234, 235, 236, 237},
  208.      {238, 239, 240, 241},
  209.      {242, 243, 244, 245}
  210.     },
  211.  
  212.     {
  213.      {215, 220, 221, 222},
  214.      {237, 246, 247, 248},
  215.      {241, 249, 250, 251},
  216.      {245, 252, 253, 254}
  217.     },
  218.  
  219.     {
  220.      {222, 227, 228, 229},
  221.      {248, 255, 256, 257},
  222.      {251, 258, 259, 260},
  223.      {254, 261, 262, 263}
  224.     },
  225.  
  226.     {
  227.      {229, 232, 233, 212},
  228.      {257, 264, 265, 234},
  229.      {260, 266, 267, 238},
  230.      {263, 268, 269, 242}
  231.     },
  232.  
  233.     /* Bottom */
  234.  
  235.     {
  236.      {270, 270, 270, 270},
  237.      {279, 280, 281, 282},
  238.      {275, 276, 277, 278},
  239.      {271, 272, 273, 274}
  240.     },
  241.  
  242.     {
  243.      {270, 270, 270, 270},
  244.      {282, 289, 290, 291},
  245.      {278, 286, 287, 288},
  246.      {274, 283, 284, 285}
  247.     },
  248.  
  249.     {
  250.      {270, 270, 270, 270},
  251.      {291, 298, 299, 300},
  252.      {288, 295, 296, 297},
  253.      {285, 292, 293, 294}
  254.     },
  255.  
  256.     {
  257.      {270, 270, 270, 270},
  258.      {300, 305, 306, 279},
  259.      {297, 303, 304, 275},
  260.      {294, 301, 302, 271}
  261.     }
  262. };
  263.  
  264. #define    npatches ((sizeof patches) / (16 * sizeof(short)))
  265.  
  266. /*  Vertex table.  Vertices in this table are addressed    by the indices in
  267.     the    patch table above.  Note that index 0 is never used.  */
  268.  
  269. static vertex vertices[] = {
  270.  
  271.     { 0, 0,    0 },                  /*   0: Throwaway */
  272.  
  273.     {    1.4,         0,          2.4 },      /*   1 */
  274.     {    1.4,    -0.784,          2.4 },      /*   2 */
  275.     {     0.784,      -1.4,          2.4 },      /*   3 */
  276.     {      0,      -1.4,          2.4 },      /*   4 */
  277.     {    1.3375,         0,      2.53125 },      /*   5 */
  278.  
  279.     {    1.3375,    -0.749,      2.53125 },      /*   6 */
  280.     {     0.749,   -1.3375,      2.53125 },      /*   7 */
  281.     {      0,   -1.3375,      2.53125 },      /*   8 */
  282.     {    1.4375,         0,      2.53125 },      /*   9 */
  283.     {    1.4375,    -0.805,      2.53125 },      /*  10 */
  284.  
  285.     {     0.805,   -1.4375,      2.53125 },      /*  11 */
  286.     {      0,   -1.4375,      2.53125 },      /*  12 */
  287.     {    1.5,         0,          2.4 },      /*  13 */
  288.     {    1.5,     -0.84,          2.4 },      /*  14 */
  289.     {      0.84,      -1.5,          2.4 },      /*  15 */
  290.  
  291.     {      0,      -1.5,          2.4 },      /*  16 */
  292.     {    -0.784,      -1.4,          2.4 },      /*  17 */
  293.     {      -1.4,    -0.784,          2.4 },      /*  18 */
  294.     {      -1.4,         0,          2.4 },      /*  19 */
  295.     {    -0.749,   -1.3375,      2.53125 },      /*  20 */
  296.  
  297.     {   -1.3375,    -0.749,      2.53125 },      /*  21 */
  298.     {   -1.3375,         0,      2.53125 },      /*  22 */
  299.     {    -0.805,   -1.4375,      2.53125 },      /*  23 */
  300.     {   -1.4375,    -0.805,      2.53125 },      /*  24 */
  301.     {   -1.4375,         0,      2.53125 },      /*  25 */
  302.  
  303.     {     -0.84,      -1.5,          2.4 },      /*  26 */
  304.     {      -1.5,     -0.84,          2.4 },      /*  27 */
  305.     {      -1.5,         0,          2.4 },      /*  28 */
  306.     {      -1.4,     0.784,          2.4 },      /*  29 */
  307.     {    -0.784,       1.4,          2.4 },      /*  30 */
  308.  
  309.     {      0,       1.4,          2.4 },      /*  31 */
  310.     {   -1.3375,     0.749,      2.53125 },      /*  32 */
  311.     {    -0.749,    1.3375,      2.53125 },      /*  33 */
  312.     {      0,    1.3375,      2.53125 },      /*  34 */
  313.     {   -1.4375,     0.805,      2.53125 },      /*  35 */
  314.  
  315.     {    -0.805,    1.4375,      2.53125 },      /*  36 */
  316.     {      0,    1.4375,      2.53125 },      /*  37 */
  317.     {      -1.5,      0.84,          2.4 },      /*  38 */
  318.     {     -0.84,       1.5,          2.4 },      /*  39 */
  319.     {      0,       1.5,          2.4 },      /*  40 */
  320.  
  321.     {     0.784,       1.4,          2.4 },      /*  41 */
  322.     {    1.4,     0.784,          2.4 },      /*  42 */
  323.     {     0.749,    1.3375,      2.53125 },      /*  43 */
  324.     {    1.3375,     0.749,      2.53125 },      /*  44 */
  325.     {     0.805,    1.4375,      2.53125 },      /*  45 */
  326.  
  327.     {    1.4375,     0.805,      2.53125 },      /*  46 */
  328.     {      0.84,       1.5,          2.4 },      /*  47 */
  329.     {    1.5,      0.84,          2.4 },      /*  48 */
  330.     {      1.75,         0,        1.875 },      /*  49 */
  331.     {      1.75,     -0.98,        1.875 },      /*  50 */
  332.  
  333.     {      0.98,     -1.75,        1.875 },      /*  51 */
  334.     {      0,     -1.75,        1.875 },      /*  52 */
  335.     {      2,         0,         1.35 },      /*  53 */
  336.     {      2,     -1.12,         1.35 },      /*  54 */
  337.     {      1.12,        -2,         1.35 },      /*  55 */
  338.  
  339.     {      0,        -2,         1.35 },      /*  56 */
  340.     {      2,         0,          0.9 },      /*  57 */
  341.     {      2,     -1.12,          0.9 },      /*  58 */
  342.     {      1.12,        -2,          0.9 },      /*  59 */
  343.     {      0,        -2,          0.9 },      /*  60 */
  344.  
  345.     {     -0.98,     -1.75,        1.875 },      /*  61 */
  346.     {     -1.75,     -0.98,        1.875 },      /*  62 */
  347.     {     -1.75,         0,        1.875 },      /*  63 */
  348.     {     -1.12,        -2,         1.35 },      /*  64 */
  349.     {     -2,     -1.12,         1.35 },      /*  65 */
  350.  
  351.     {     -2,         0,         1.35 },      /*  66 */
  352.     {     -1.12,        -2,          0.9 },      /*  67 */
  353.     {     -2,     -1.12,          0.9 },      /*  68 */
  354.     {     -2,         0,          0.9 },      /*  69 */
  355.     {     -1.75,      0.98,        1.875 },      /*  70 */
  356.  
  357.     {     -0.98,      1.75,        1.875 },      /*  71 */
  358.     {      0,      1.75,        1.875 },      /*  72 */
  359.     {     -2,      1.12,         1.35 },      /*  73 */
  360.     {     -1.12,         2,         1.35 },      /*  74 */
  361.     {      0,         2,         1.35 },      /*  75 */
  362.  
  363.     {     -2,      1.12,          0.9 },      /*  76 */
  364.     {     -1.12,         2,          0.9 },      /*  77 */
  365.     {      0,         2,          0.9 },      /*  78 */
  366.     {      0.98,      1.75,        1.875 },      /*  79 */
  367.     {      1.75,      0.98,        1.875 },      /*  80 */
  368.  
  369.     {      1.12,         2,         1.35 },      /*  81 */
  370.     {      2,      1.12,         1.35 },      /*  82 */
  371.     {      1.12,         2,          0.9 },      /*  83 */
  372.     {      2,      1.12,          0.9 },      /*  84 */
  373.     {      2,         0,         0.45 },      /*  85 */
  374.  
  375.     {      2,     -1.12,         0.45 },      /*  86 */
  376.     {      1.12,        -2,         0.45 },      /*  87 */
  377.     {      0,        -2,         0.45 },      /*  88 */
  378.     {    1.5,         0,        0.225 },      /*  89 */
  379.     {    1.5,     -0.84,        0.225 },      /*  90 */
  380.  
  381.     {      0.84,      -1.5,        0.225 },      /*  91 */
  382.     {      0,      -1.5,        0.225 },      /*  92 */
  383.     {    1.5,         0,         0.15 },      /*  93 */
  384.     {    1.5,     -0.84,         0.15 },      /*  94 */
  385.     {      0.84,      -1.5,         0.15 },      /*  95 */
  386.  
  387.     {      0,      -1.5,         0.15 },      /*  96 */
  388.     {     -1.12,        -2,         0.45 },      /*  97 */
  389.     {     -2,     -1.12,         0.45 },      /*  98 */
  390.     {     -2,         0,         0.45 },      /*  99 */
  391.     {     -0.84,      -1.5,        0.225 },      /* 100 */
  392.  
  393.     {      -1.5,     -0.84,        0.225 },      /* 101 */
  394.     {      -1.5,         0,        0.225 },      /* 102 */
  395.     {     -0.84,      -1.5,         0.15 },      /* 103 */
  396.     {      -1.5,     -0.84,         0.15 },      /* 104 */
  397.     {      -1.5,         0,         0.15 },      /* 105 */
  398.  
  399.     {     -2,      1.12,         0.45 },      /* 106 */
  400.     {     -1.12,         2,         0.45 },      /* 107 */
  401.     {      0,         2,         0.45 },      /* 108 */
  402.     {      -1.5,      0.84,        0.225 },      /* 109 */
  403.     {     -0.84,       1.5,        0.225 },      /* 110 */
  404.  
  405.     {      0,       1.5,        0.225 },      /* 111 */
  406.     {      -1.5,      0.84,         0.15 },      /* 112 */
  407.     {     -0.84,       1.5,         0.15 },      /* 113 */
  408.     {      0,       1.5,         0.15 },      /* 114 */
  409.     {      1.12,         2,         0.45 },      /* 115 */
  410.  
  411.     {      2,       1.2,         0.45 },      /* 116 */
  412.     {      0.84,       1.5,        0.225 },      /* 117 */
  413.     {    1.5,      0.84,        0.225 },      /* 118 */
  414.     {      0.84,       1.5,         0.15 },      /* 119 */
  415.     {    1.5,      0.84,         0.15 },      /* 120 */
  416.  
  417.     {      -1.6,         0,        2.025 },      /* 121 */
  418.     {      -1.6,      -0.3,        2.025 },      /* 122 */
  419.     {      -1.5,      -0.3,         2.25 },      /* 123 */
  420.     {      -1.5,         0,         2.25 },      /* 124 */
  421.     {      -2.3,         0,        2.025 },      /* 125 */
  422.  
  423.     {      -2.3,      -0.3,        2.025 },      /* 126 */
  424.     {      -2.5,      -0.3,         2.25 },      /* 127 */
  425.     {      -2.5,         0,         2.25 },      /* 128 */
  426.     {      -2.7,         0,        2.025 },      /* 129 */
  427.     {      -2.7,      -0.3,        2.025 },      /* 130 */
  428.  
  429.     {     -3,      -0.3,         2.25 },      /* 131 */
  430.     {     -3,         0,         2.25 },      /* 132 */
  431.     {      -2.7,         0,          1.8 },      /* 133 */
  432.     {      -2.7,      -0.3,          1.8 },      /* 134 */
  433.     {     -3,      -0.3,          1.8 },      /* 135 */
  434.  
  435.     {     -3,         0,          1.8 },      /* 136 */
  436.     {      -1.5,       0.3,         2.25 },      /* 137 */
  437.     {      -1.6,       0.3,        2.025 },      /* 138 */
  438.     {      -2.5,       0.3,         2.25 },      /* 139 */
  439.     {      -2.3,       0.3,        2.025 },      /* 140 */
  440.  
  441.     {     -3,       0.3,         2.25 },      /* 141 */
  442.     {      -2.7,       0.3,        2.025 },      /* 142 */
  443.     {     -3,       0.3,          1.8 },      /* 143 */
  444.     {      -2.7,       0.3,          1.8 },      /* 144 */
  445.     {      -2.7,         0,        1.575 },      /* 145 */
  446.  
  447.     {      -2.7,      -0.3,        1.575 },      /* 146 */
  448.     {     -3,      -0.3,         1.35 },      /* 147 */
  449.     {     -3,         0,         1.35 },      /* 148 */
  450.     {      -2.5,         0,        1.125 },      /* 149 */
  451.     {      -2.5,      -0.3,        1.125 },      /* 150 */
  452.  
  453.     {     -2.65,      -0.3,       0.9375 },      /* 151 */
  454.     {     -2.65,         0,       0.9375 },      /* 152 */
  455.     {     -2,      -0.3,          0.9 },      /* 153 */
  456.     {      -1.9,      -0.3,          0.6 },      /* 154 */
  457.     {      -1.9,         0,          0.6 },      /* 155 */
  458.  
  459.     {     -3,       0.3,         1.35 },      /* 156 */
  460.     {      -2.7,       0.3,        1.575 },      /* 157 */
  461.     {     -2.65,       0.3,       0.9375 },      /* 158 */
  462.     {      -2.5,       0.3,        1.125 },      /* 159 */
  463.     {      -1.9,       0.3,          0.6 },      /* 160 */
  464.  
  465.     {     -2,       0.3,          0.9 },      /* 161 */
  466.     {    1.7,         0,        1.425 },      /* 162 */
  467.     {    1.7,     -0.66,        1.425 },      /* 163 */
  468.     {    1.7,     -0.66,          0.6 },      /* 164 */
  469.     {    1.7,         0,          0.6 },      /* 165 */
  470.  
  471.     {    2.6,         0,        1.425 },      /* 166 */
  472.     {    2.6,     -0.66,        1.425 },      /* 167 */
  473.     {    3.1,     -0.66,        0.825 },      /* 168 */
  474.     {    3.1,         0,        0.825 },      /* 169 */
  475.     {    2.3,         0,          2.1 },      /* 170 */
  476.  
  477.     {    2.3,     -0.25,          2.1 },      /* 171 */
  478.     {    2.4,     -0.25,        2.025 },      /* 172 */
  479.     {    2.4,         0,        2.025 },      /* 173 */
  480.     {    2.7,         0,          2.4 },      /* 174 */
  481.     {    2.7,     -0.25,          2.4 },      /* 175 */
  482.  
  483.     {    3.3,     -0.25,          2.4 },      /* 176 */
  484.     {    3.3,         0,          2.4 },      /* 177 */
  485.     {    1.7,      0.66,          0.6 },      /* 178 */
  486.     {    1.7,      0.66,        1.425 },      /* 179 */
  487.     {    3.1,      0.66,        0.825 },      /* 180 */
  488.  
  489.     {    2.6,      0.66,        1.425 },      /* 181 */
  490.     {    2.4,      0.25,        2.025 },      /* 182 */
  491.     {    2.3,      0.25,          2.1 },      /* 183 */
  492.     {    3.3,      0.25,          2.4 },      /* 184 */
  493.     {    2.7,      0.25,          2.4 },      /* 185 */
  494.  
  495.     {    2.8,         0,        2.475 },      /* 186 */
  496.     {    2.8,     -0.25,        2.475 },      /* 187 */
  497.     {     3.525,     -0.25,      2.49375 },      /* 188 */
  498.     {     3.525,         0,      2.49375 },      /* 189 */
  499.     {    2.9,         0,        2.475 },      /* 190 */
  500.  
  501.     {    2.9,     -0.15,        2.475 },      /* 191 */
  502.     {      3.45,     -0.15,       2.5125 },      /* 192 */
  503.     {      3.45,         0,       2.5125 },      /* 193 */
  504.     {    2.8,         0,          2.4 },      /* 194 */
  505.     {    2.8,     -0.15,          2.4 },      /* 195 */
  506.  
  507.     {    3.2,     -0.15,          2.4 },      /* 196 */
  508.     {    3.2,         0,          2.4 },      /* 197 */
  509.     {     3.525,      0.25,      2.49375 },      /* 198 */
  510.     {    2.8,      0.25,        2.475 },      /* 199 */
  511.     {      3.45,      0.15,       2.5125 },      /* 200 */
  512.  
  513.     {    2.9,      0.15,        2.475 },      /* 201 */
  514.     {    3.2,      0.15,          2.4 },      /* 202 */
  515.     {    2.8,      0.15,          2.4 },      /* 203 */
  516.     {      0,         0,         3.15 },      /* 204 */
  517.     {      0,    -0.002,         3.15 },      /* 205 */
  518.  
  519.     {     0.002,         0,         3.15 },      /* 206 */
  520.     {    0.8,         0,         3.15 },      /* 207 */
  521.     {    0.8,     -0.45,         3.15 },      /* 208 */
  522.     {      0.45,      -0.8,         3.15 },      /* 209 */
  523.     {      0,      -0.8,         3.15 },      /* 210 */
  524.  
  525.     {      0,         0,         2.85 },      /* 211 */
  526.     {    0.2,         0,          2.7 },      /* 212 */
  527.     {    0.2,    -0.112,          2.7 },      /* 213 */
  528.     {     0.112,      -0.2,          2.7 },      /* 214 */
  529.     {      0,      -0.2,          2.7 },      /* 215 */
  530.  
  531.     {    -0.002,         0,         3.15 },      /* 216 */
  532.     {     -0.45,      -0.8,         3.15 },      /* 217 */
  533.     {      -0.8,     -0.45,         3.15 },      /* 218 */
  534.     {      -0.8,         0,         3.15 },      /* 219 */
  535.     {    -0.112,      -0.2,          2.7 },      /* 220 */
  536.  
  537.     {      -0.2,    -0.112,          2.7 },      /* 221 */
  538.     {      -0.2,         0,          2.7 },      /* 222 */
  539.     {      0,     0.002,         3.15 },      /* 223 */
  540.     {      -0.8,      0.45,         3.15 },      /* 224 */
  541.     {     -0.45,       0.8,         3.15 },      /* 225 */
  542.  
  543.     {      0,       0.8,         3.15 },      /* 226 */
  544.     {      -0.2,     0.112,          2.7 },      /* 227 */
  545.     {    -0.112,       0.2,          2.7 },      /* 228 */
  546.     {      0,       0.2,          2.7 },      /* 229 */
  547.     {      0.45,       0.8,         3.15 },      /* 230 */
  548.  
  549.     {    0.8,      0.45,         3.15 },      /* 231 */
  550.     {     0.112,       0.2,          2.7 },      /* 232 */
  551.     {    0.2,     0.112,          2.7 },      /* 233 */
  552.     {    0.4,         0,         2.55 },      /* 234 */
  553.     {    0.4,    -0.224,         2.55 },      /* 235 */
  554.  
  555.     {     0.224,      -0.4,         2.55 },      /* 236 */
  556.     {      0,      -0.4,         2.55 },      /* 237 */
  557.     {    1.3,         0,         2.55 },      /* 238 */
  558.     {    1.3,    -0.728,         2.55 },      /* 239 */
  559.     {     0.728,      -1.3,         2.55 },      /* 240 */
  560.  
  561.     {      0,      -1.3,         2.55 },      /* 241 */
  562.     {    1.3,         0,          2.4 },      /* 242 */
  563.     {    1.3,    -0.728,          2.4 },      /* 243 */
  564.     {     0.728,      -1.3,          2.4 },      /* 244 */
  565.     {      0,      -1.3,          2.4 },      /* 245 */
  566.  
  567.     {    -0.224,      -0.4,         2.55 },      /* 246 */
  568.     {      -0.4,    -0.224,         2.55 },      /* 247 */
  569.     {      -0.4,         0,         2.55 },      /* 248 */
  570.     {    -0.728,      -1.3,         2.55 },      /* 249 */
  571.     {      -1.3,    -0.728,         2.55 },      /* 250 */
  572.  
  573.     {      -1.3,         0,         2.55 },      /* 251 */
  574.     {    -0.728,      -1.3,          2.4 },      /* 252 */
  575.     {      -1.3,    -0.728,          2.4 },      /* 253 */
  576.     {      -1.3,         0,          2.4 },      /* 254 */
  577.     {      -0.4,     0.224,         2.55 },      /* 255 */
  578.  
  579.     {    -0.224,       0.4,         2.55 },      /* 256 */
  580.     {      0,       0.4,         2.55 },      /* 257 */
  581.     {      -1.3,     0.728,         2.55 },      /* 258 */
  582.     {    -0.728,       1.3,         2.55 },      /* 259 */
  583.     {      0,       1.3,         2.55 },      /* 260 */
  584.  
  585.     {      -1.3,     0.728,          2.4 },      /* 261 */
  586.     {    -0.728,       1.3,          2.4 },      /* 262 */
  587.     {      0,       1.3,          2.4 },      /* 263 */
  588.     {     0.224,       0.4,         2.55 },      /* 264 */
  589.     {    0.4,     0.224,         2.55 },      /* 265 */
  590.  
  591.     {     0.728,       1.3,         2.55 },      /* 266 */
  592.     {    1.3,     0.728,         2.55 },      /* 267 */
  593.     {     0.728,       1.3,          2.4 },      /* 268 */
  594.     {    1.3,     0.728,          2.4 },      /* 269 */
  595.     {      0,         0,        0 },      /* 270 */
  596.  
  597.     {    1.5,         0,         0.15 },      /* 271 */
  598.     {    1.5,      0.84,         0.15 },      /* 272 */
  599.     {      0.84,       1.5,         0.15 },      /* 273 */
  600.     {      0,       1.5,         0.15 },      /* 274 */
  601.     {    1.5,         0,        0.075 },      /* 275 */
  602.  
  603.     {    1.5,      0.84,        0.075 },      /* 276 */
  604.     {      0.84,       1.5,        0.075 },      /* 277 */
  605.     {      0,       1.5,        0.075 },      /* 278 */
  606.     {     1.425,         0,        0 },      /* 279 */
  607.     {     1.425,     0.798,        0 },      /* 280 */
  608.  
  609.     {     0.798,     1.425,        0 },      /* 281 */
  610.     {      0,     1.425,        0 },      /* 282 */
  611.     {     -0.84,       1.5,         0.15 },      /* 283 */
  612.     {      -1.5,      0.84,         0.15 },      /* 284 */
  613.     {      -1.5,         0,         0.15 },      /* 285 */
  614.  
  615.     {     -0.84,       1.5,        0.075 },      /* 286 */
  616.     {      -1.5,      0.84,        0.075 },      /* 287 */
  617.     {      -1.5,         0,        0.075 },      /* 288 */
  618.     {    -0.798,     1.425,        0 },      /* 289 */
  619.     {    -1.425,     0.798,        0 },      /* 290 */
  620.  
  621.     {    -1.425,         0,        0 },      /* 291 */
  622.     {      -1.5,     -0.84,         0.15 },      /* 292 */
  623.     {     -0.84,      -1.5,         0.15 },      /* 293 */
  624.     {      0,      -1.5,         0.15 },      /* 294 */
  625.     {      -1.5,     -0.84,        0.075 },      /* 295 */
  626.  
  627.     {     -0.84,      -1.5,        0.075 },      /* 296 */
  628.     {      0,      -1.5,        0.075 },      /* 297 */
  629.     {    -1.425,    -0.798,        0 },      /* 298 */
  630.     {    -0.798,    -1.425,        0 },      /* 299 */
  631.     {      0,    -1.425,        0 },      /* 300 */
  632.  
  633.     {      0.84,      -1.5,         0.15 },      /* 301 */
  634.     {    1.5,     -0.84,         0.15 },      /* 302 */
  635.     {      0.84,      -1.5,        0.075 },      /* 303 */
  636.     {    1.5,     -0.84,        0.075 },      /* 304 */
  637.     {     0.798,    -1.425,        0 },      /* 305 */
  638.  
  639.     {     1.425,    -0.798,        0 }      /* 306 */
  640. };
  641.  
  642. #define    nvert ((sizeof vertices) / (3 *    sizeof(double)))
  643.  
  644. static void
  645. display_patch(patch)
  646.    patchdef patch;
  647. {
  648.    int i, j;
  649.    fprintf(datfile, "object {\n");
  650.    fprintf(datfile, "      bezier %d, %g, %d, %d,\n",
  651.        Quality, Flatness, U_Steps, V_Steps);
  652.    for (i=0;i<4;i++) {
  653.       fprintf(datfile, "         ");
  654.       for (j=0;j<4;j++) {
  655.      fprintf(datfile, "<%g, %g, %g>",
  656.          vertices[patch[i][j]][X],
  657.          vertices[patch[i][j]][Z],
  658.          vertices[patch[i][j]][Y]);
  659.      if (j<3) fprintf(datfile, ", ");
  660.      }
  661.       if (i<3)
  662.      fprintf(datfile, ",\n");
  663.       else
  664.      fprintf(datfile, "\n");
  665.       }
  666.    fprintf(datfile, "      }\n");
  667. }
  668.  
  669. void
  670. main()
  671. {
  672.    int i;
  673.    
  674.    if ((datfile = fopen("teapot.inc", "wt")) != NULL) {
  675.       fprintf(datfile, "define teapot\n");
  676.       fprintf(datfile, "object {\n");
  677.       for (i = 0; i < npatches; i++) {
  678.      switch (i) {
  679.      case 0:
  680.         fprintf(datfile, "# Rim\n");
  681.         break;
  682.      case 4:
  683.         fprintf(datfile, "# Body\n");
  684.         break;
  685.      case 12:
  686.         fprintf(datfile, "# Handle\n");
  687.         break;
  688.      case 16:
  689.         fprintf(datfile, "# Spout\n");
  690.         break;
  691.      case 20:
  692.         fprintf(datfile, "# Lid\n");
  693.         break;
  694.      case 28:
  695.         fprintf(datfile, "# Bottom\n");
  696.         break;
  697.      }
  698.      if (i==0)
  699.         fprintf(datfile, "   ");
  700.      else
  701.         fprintf(datfile, " + ");
  702.      display_patch(patches[i]);
  703.      }
  704.       fprintf(datfile, "   bounds object {\n");
  705.       fprintf(datfile, "      box <-3.4683, -2.02, 0>,\n");
  706.       fprintf(datfile, "          <3.03, 2.02, 3.1815> }\n");
  707.       fprintf(datfile, "   }\n");
  708.       }
  709. }
  710.